![]() |
||
| [ ] |
|
|
Math-ObjektHier sind ab jetzt vor allem Algorithmen zum numerischen Lösen von mathematischen Problemen zu finden. Allen Algorithmen sind von dieser Seite aus verwendbar, natürlich sind sie auch zum Download bereitgestellt. Die Algorithmen werden unter einem Objekt "Math2" zusammengefasst.
Gaußscher Algorithmus mit teilweiser PivotisierungDer Gaußsche Algorithmus formt das Gleichungssystem in eine Dreiecksform um, indem er ein vielfaches einer Zeile zu einer anderen so hinzuaddiert, dass das erste Element Null wird. Anschließend wird das Gleichungssystem rekursiv aufgelöst.Top Quellcode: function Math2_Gauss(A, b, eps)
{
var n = A.length-1
var p, maxp, maxz, z, i, q, k, s;
var x = new Array(A.length);
for(var is = 0; is < n; is++) // Pivotisierung
{
p = is;
maxp = Math.abs(A[p][is]);
for(i = is+1; i <= n; i++) // Pivotelement p suchen
{
maxz = Math.abs(A[i][is]);
if(maxz > maxp)
{
maxp = maxz;
p = i;
}
}
if(maxp > eps) // Prüfen ob größer Null bzw. Epsilon
{
if(p != is) // Zeilen tauschen
{
z = A[is];
A[is] = A[p];
A[p] = z;
z = b[is];
b[is] = b[p];
b[p] = z;
}
}
else
{
alert("Fehler bei Lösung des Gleichungssystem:\n\n\tdet(A) = 0\n\tPivotelement = 0");
return null;
}
for(i = 1+is; i <= n; i++) // Gaußscher Algorithmus
{
q = A[i][is]/A[is][is];
for(k = is+1; k <= n; k++) A[i][k] = A[i][k] - q*A[is][k];
b[i] = b[i] - q*b[is];
}
}
if(Math.abs(A[n][n]) >= eps)
{
for(i = n; i > -1; i--) // Rückwertsauflösung
{
s = 0;
for(k = i+1; k <= n; k++) s += A[i][k]*x[k];
x[i] = (b[i]-s) / A[i][i];
}
}
else
{
alert("Fehler bei Lösung des Gleichungssystem:\n\n\tdet(A) = 0");
return null;
}
return x;
}
Top | Gaußscher
Algorithmus Beispiel: Top | Gaußscher Algorithmus
Gauß-Jordan-Verfahren mit teilweiser PivotisierungDas Gauß-Jordan-Verfahren stellt eine Modifikation des Gaußschen Algorithmus dar. Bei diesem Verfahren zum Lösen von Gleichungssystemen wird die Koeffizientenmatrix in eine Einheitsmatrix überführt, so das der Lösungsvektor dem modifizierten Konstantenvektor entspricht. Ein rekursives Auflösen wird überflüssig.Top Quellcode: function Math2_GaussJordan(A, b, eps)
{
var n = A.length-1;
var is, k, i, ism1, Q;
for(is = 0; is <= n; is++)
{
// Pievotisierung:
p = is;
maxp = Math.abs(A[p][is]);
for(i = is+1; i <= n; i++) // Pivotelement p suchen
{
maxz = Math.abs(A[i][is]);
if(maxz > maxp)
{
maxp = maxz;
p = i;
}
}
if(maxp > eps) // Prüfen ob größer Null bzw. Epselon
{
if(p != is) // Zeilen tauschen
{
z = A[is];
A[is] = A[p];
A[p] = z;
z = b[is];
b[is] = b[p];
b[p] = z;
}
}
else
{
alert("Fehler bei Lösung des Gleichungssystem:\n\n\tdet(A) = 0\n\tPivotelement = 0");
return null;
}
// GaussJordan:
for(k = is+1; k <= n; k++) A[is][k] = A[is][k]/A[is][is];
b[is] = b[is]/A[is][is];
ism1 = is-1;
for(i = 0; i <= ism1; i++)
{
Q = A[i][is];
for(k = is+1; k <= n; k++)
{
A[i][k] -= Q*A[is][k];
}
b[i] -= Q*b[is];
}
for(i = is+1; i <= n; i++)
{
Q = A[i][is];
for(k = is+1; k <= n; k++)
{
A[i][k] -= Q*A[is][k];
}
b[i] -= Q*b[is];
}
}
return b;
}
Top | Gauß-Jordan-Verfahren
Beispiel: Top | Gauß-Jordan-Verfahren
Newton-VerfahrenDas Newton-Verfahren bestimmt über einen Startpunkt analytisch die Funktionstangete um damit die Nullstelle zu approximieren. Das hier gezeigte Script findet allerdings nur reelle Nullstellen bei ganzrationalen Polynomen. Prinzipiell kann das Newton-Verfahren aber auch auf andere Funktionstypen übertragen werden.Top Quellcode: function Math2_Newton(A, x2, itermax, eps1, eps2)
{
var x1;
var fx, fsx;
var B, C, i, nm1;
var iter = 0;
do
{
if(iter < itermax)
{
iter++;
x1 = x2;
// Horner-Schema für Funktionswert und Wert der ersten Ableitung:
B = A[0]*x1 + A[1];
C = A[0]*x1 + B;
nm1 = A.length-1;
for(i = 2; i < nm1; i++)
{
B = B*x1 + A[i];
C = C*x1 + B;
}
fx = B*x1 + A[nm1];
fsx = C;
// Division durch NULL verhinern:
if(fsx == 0)
{
alert("Division durch NULL\nProgrammabbruch");
return x2;
}
x2 = x1 - fx/fsx;
}
else
{
alert("ITERMAX erreicht\nProgrammabbruch");
return x2;
}
} while(Math.abs(fx) > eps1 && Math.abs(x2-x1) > eps2);
return x2;
}
Top | Newton-Verfahren
Beispiel: Top | Newton-Verfahren | |||
| [Home] [Menu-Objekt] [Graphics-Objekt]
[Math-Objekt] [Objekte u. Funktionen]
[alte
Scripts] [Copyrigth] [News & Infos]
[Info] [Privat] [HTW|Schule]
[Webwanze]
© 2001-2003 Roland Steffen |
|